/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package Calculos;

import java.util.ArrayList;

/**
 *
 * @author Isabela
 */
public class EngastadaCentrada {

     private ArrayList<double []> cargaCentrada=new ArrayList<double[]>();
     double incremento=0.005;
     private double R;
     private static final double coeficienteE = 205*Math.pow(10, 9);
     private ArrayList<double []> deformada=new ArrayList<double[]>();
     

       public void CalculaCargaCentrada(double forca, double tamanhoViga, double posicao) {
        calculaReacoesApoios(forca);
        CalculaFuncaoFletor(forca, tamanhoViga, posicao);
        CalculaFuncaoEsforcoCortante(forca, tamanhoViga, posicao);


    }

 private void calculaReacoesApoios(double forca){
   //Reação no apoio

    R=forca;


   }

private void CalculaFuncaoFletor(double forca,double comprimento,double posicao){

    int tamanhoVetor = (int) (comprimento / incremento);
        double x[] = new double[tamanhoVetor];
        double y[] = new double[tamanhoVetor];
        for (int i = 1; i < tamanhoVetor; i++) {
            x[i] = x[i - 1] + incremento;
        }

        for(int i=0;i<tamanhoVetor;i++){
            if(x[i]<=(posicao)){
                y[i]=-1*((forca)*(posicao-x[i]));
            }
            else{
                y[i]=0;
            }
        }
       // new Graficos("Gráfico Momento Fletor Força Centrada", x, y);
        cargaCentrada.add(x);
        cargaCentrada.add(y);
}

    private void CalculaFuncaoEsforcoCortante(double forca, double comprimento, double posicao) {
        int tamanhoVetor = (int) (comprimento / incremento);
        double x[] = new double[tamanhoVetor];
        double y[] = new double[tamanhoVetor];
        for (int i = 1; i < tamanhoVetor; i++) {
            x[i] = x[i - 1] + incremento;
        }
        for (int i = 0; i < tamanhoVetor; i++) {
            if (x[i] <= posicao) {
                y[i] = -1 * forca;
            } else {
                y[i] = 0;

            }
        }


       // new Graficos("Gráfico Esforço Cortante Força Centrada", x, y);
        cargaCentrada.add(x);
        cargaCentrada.add(y);
}


public double CalculaFuncaoFletorNoPonto(double x, double forca, double comprimento,double posicao){


    double resultado=0.0;
      if(x<=(posicao)){
                resultado=-1*((forca)*(posicao-x));
            }
            else{
                resultado=0;
            }
    return resultado;
}

 public double  CalculaEsforcoCortanteNoPonto(double x,double forca, double comprimento, double posicao) {

        double resultado;

        if (x <= posicao) {
            resultado = -1 * forca;
        } else {
            resultado = 0;
        }

        return resultado;
    }

    public void CalculaDeformadaVetor(double forca,double comprimento,double posicao, double iY){

        int tamanhoVetor = (int) (comprimento / incremento);
        double x[] = new double[tamanhoVetor];
        double y[] = new double[tamanhoVetor];

        for (int i = 1; i < tamanhoVetor; i++) {
            x[i] = x[i - 1] + incremento;
        }

        for(int i=0;i<tamanhoVetor;i++){
            y[i] = this.CalculaDeformadaPonto(x[i], forca, posicao, comprimento, iY);
        }

        deformada.add(x);
        deformada.add(y);
    }


    public double CalculaDeformadaPonto(double x, double forca, double posicao, double comprimento, double iY){

        //Caso 0 <= x <= Posição da Carga
        double resultado = 0;
        double a=posicao;
        double P=forca;
        if(x <=a){
            resultado=P*Math.pow(x, 2)*((3*a)-x);
            
        }

        //Caso Posição da carga <= x <= Comprimento da viga
        if(x >= a){
            resultado=P*Math.pow(a, 2)*((3*x)-a);
        }

        resultado/=6*coeficienteE*iY;
        return resultado;
    }

    public ArrayList<double[]> getCargaCentrada() {
        return cargaCentrada;
    }

    public double getR() {
        return R;
    }

    public ArrayList<double[]> getDeformada() {
        return deformada;
    }

    
    


}
